Cross-Site Scripting (XSS) একটি সাধারণ ওয়েব অ্যাপ্লিকেশন নিরাপত্তা দুর্বলতা, যা আক্রমণকারীদের ক্ষতিকর স্ক্রিপ্ট (যেমন JavaScript) ইনজেক্ট করতে সহায়ক। এটি তখন ঘটে যখন একটি ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীর ইনপুট ফিল্টার বা প্রক্রিয়া করার ক্ষেত্রে ভুল করে, এবং সেই ইনপুটটি সরাসরি ওয়েব পেজে রেন্ডার হয়।
XSS আক্রমণ সাধারণত তখন ঘটে যখন:
- আক্রমণকারী ব্যবহারকারীর ইনপুটে JavaScript কোড ইনজেক্ট করে।
- সেই ইনপুটটি ওয়েব অ্যাপ্লিকেশনটি ফেরত দিয়ে ওয়েব পেজে দেখায়, এবং এটি ব্যবহারকারীর ব্রাউজারে কার্যকর হয়।
XSS আক্রমণ ব্যবহারকারীর ব্রাউজারে session hijacking, phishing, এবং malware ইনস্টল করতে ব্যবহৃত হতে পারে।
এটি প্রতিরোধ করতে কিছু নিরাপত্তা ব্যবস্থা রয়েছে, যা আপনার ওয়েব অ্যাপ্লিকেশনকে সুরক্ষিত রাখবে।
XSS আক্রমণ ধরন
XSS আক্রমণ তিনটি প্রধান ধরনে বিভক্ত:
- Stored XSS (Persistent XSS)
- এই আক্রমণটি তখন ঘটে যখন আক্রমণকারী একটি স্ক্রিপ্ট ইনপুট ফর্মে ইনজেক্ট করে এবং তা সিস্টেমে সংরক্ষিত হয় (যেমন, ডেটাবেস, লগ ফাইল বা ব্যবহারকারীর প্রোফাইল)। পরবর্তীতে, অন্য ব্যবহারকারী যখন সেই ইনপুট পেজে অ্যাক্সেস করে, তখন স্ক্রিপ্টটি তাদের ব্রাউজারে চলতে থাকে।
- Reflected XSS (Non-Persistent XSS)
- এখানে স্ক্রিপ্টটি ইনপুট ফিল্ডে ইনজেক্ট করা হয় এবং তা সরাসরি সিস্টেমে কোনও স্থায়ী রেকর্ড ছাড়াই রেসপন্স হিসেবে প্রদর্শিত হয়। সাধারণত এটি একটি URL বা GET প্যারামিটার হিসেবে আসে, যা আক্রমণকারী দ্বারা সংক্রমিত হয়।
- DOM-based XSS
- এই ধরনের XSS আক্রমণে, স্ক্রিপ্টটি ডকুমেন্ট অবজেক্ট মডেল (DOM) এ পরিবর্তন করে, যা ব্যবহারকারীর ইনপুট বা URL প্যারামিটার ব্যবহার করে। DOM-based XSS আক্রমণ client-side JavaScript এর মাধ্যমে ঘটে এবং সেক্ষেত্রে সার্ভারের কোনও ভূমিকা থাকে না।
XSS প্রতিরোধের উপায়
- Input Validation (ইনপুট যাচাই)
- সকল ব্যবহারকারীর ইনপুট যেমন ফর্ম, URL প্যারামিটার, এবং কুকিজের মান যাচাই করা উচিত। বিশেষভাবে স্ক্রিপ্টিং কোড যেমন
<script>
ট্যাগ বা অন্য HTML ট্যাগ প্রতিরোধ করতে ইনপুটে সীমাবদ্ধতা আরোপ করতে হবে। - ইনপুট ফিল্টারিং ও অক্ষর পরিবর্তন ব্যবহার করা যেতে পারে যেমন
<
(যা <
এর প্রতিস্থাপন) এবং >
(যা >
এর প্রতিস্থাপন)।
- Output Encoding (আউটপুট এনকোডিং)
- সঠিকভাবে আউটপুট এনকোডিং নিশ্চিত করা উচিত যাতে ইনপুট করা কোড ওয়েব পেজে স্ক্রিপ্ট হিসেবে চলতে না পারে। Tapestry, Angular, React, এবং অন্যান্য আধুনিক ফ্রেমওয়ার্কগুলিতে আউটপুট এনকোডিং স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়।
Content Security Policy (CSP)
- CSP একটি নিরাপত্তা বৈশিষ্ট্য যা ওয়েব পেজের resources (যেমন স্ক্রিপ্ট, ছবি, এবং স্টাইলশীট) লোড করার জন্য নির্দিষ্ট উৎস থেকে উৎসাহ দেয়। CSP সেট করার মাধ্যমে, আপনি স্ক্রিপ্ট এক্সিকিউশন নিয়ন্ত্রণ করতে পারবেন এবং শুধুমাত্র অনুমোদিত স্ক্রিপ্টগুলোকে লোড হতে দেবেন।
উদাহরণ CSP হেডার:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-source.com;
- Escaping User Input (ব্যবহারকারীর ইনপুট অ্য_escape_ করা)
- ইনপুট করা ডেটার বিশেষ চরিত্রগুলি অ্য_escape_ করতে হবে, যাতে তা HTML, JavaScript বা অন্যান্য স্ক্রিপ্টিং ভাষায় পরিবর্তিত না হয়। উদাহরণস্বরূপ, HTML এনকোডিং বা JavaScript escaping করতে হবে যাতে XSS আক্রমণ প্রতিরোধ করা যায়।
- HTTPOnly এবং Secure কুকিজ
- কুকিজে
HTTPOnly
এবং Secure
ফ্ল্যাগ ব্যবহার করলে স্ক্রিপ্টগুলি কুকি অ্যাক্সেস করতে পারবে না এবং কুকি শুধুমাত্র HTTPS কানেকশনে পাঠানো হবে। এতে session hijacking থেকে রক্ষা পাওয়া যায়।
X-XSS-Protection হেডার ব্যবহার
- অনেক আধুনিক ব্রাউজার XSS আক্রমণ প্রতিরোধের জন্য একটি বিল্ট-ইন X-XSS-Protection হেডার সমর্থন করে। এটি সক্রিয় করলে ব্রাউজার স্বয়ংক্রিয়ভাবে ইনপুট স্ক্রিপ্টকে ব্লক করে।
উদাহরণ:
X-XSS-Protection: 1; mode=block
- Subresource Integrity (SRI)
- SRI হল একটি নিরাপত্তা বৈশিষ্ট্য যা ব্যবহারকারীকে নিশ্চিত করতে সাহায্য করে যে ওয়েবপেজে লোড হওয়া স্ক্রিপ্ট বা রিসোর্সগুলি কোনও ধরনের পরিবর্তনের শিকার হয়নি। এটি বিশেষত থার্ড-পার্টি সিডিএন থেকে লোড হওয়া স্ক্রিপ্টের জন্য গুরুত্বপূর্ণ।
অন্যান্য নিরাপত্তা ব্যবস্থা
XSS ছাড়াও ওয়েব অ্যাপ্লিকেশনে আরও কিছু নিরাপত্তা ব্যবস্থা রয়েছে, যা ওয়েব অ্যাপ্লিকেশনকে নিরাপদ রাখতে সহায়ক:
- Cross-Site Request Forgery (CSRF)
- CSRF আক্রমণে, আক্রমণকারী ব্যবহারকারীর পক্ষে অনুমোদিত অ্যাকশন সম্পাদন করতে পারে। এটি প্রতিরোধ করার জন্য anti-CSRF tokens ব্যবহার করা হয়, যা ফর্ম সাবমিশন অথবা অ্যাকশন কনফার্মেশন চেক করে।
- SQL Injection (SQLi)
- SQL ইনজেকশন একটি ধরনের আক্রমণ যেখানে আক্রমণকারী ওয়েব অ্যাপ্লিকেশনের ডেটাবেসে ম্যালিশিয়াস SQL কোড ইনজেক্ট করে। এটি প্রতিরোধ করতে, parameterized queries বা prepared statements ব্যবহার করা উচিত।
- Clickjacking
- Clickjacking আক্রমণে আক্রমণকারী একটি অবাঞ্ছিত উপাদান বা বোতামকে ঢেকে দিয়ে ব্যবহারকারীকে কোনও অজানা কাজ করতে বাধ্য করতে পারে। এটি প্রতিরোধ করতে X-Frame-Options হেডার ব্যবহার করা উচিত।
- Authentication and Authorization
- ওয়েব অ্যাপ্লিকেশনের সঠিক authentication (যেমন ইউজারনেম এবং পাসওয়ার্ড যাচাই) এবং authorization (যেমন রোল ভিত্তিক অ্যাক্সেস কন্ট্রোল) প্রয়োগ করতে হবে, যাতে ব্যবহারকারী নির্দিষ্ট অ্যাক্সেসের সীমা ভঙ্গ করতে না পারে।
- SSL/TLS Encryption
- SSL/TLS এনক্রিপশন ব্যবহার করলে, সমস্ত ডেটা ট্রান্সমিশন নিরাপদ হয় এবং Man-in-the-Middle (MITM) আক্রমণ থেকে সুরক্ষা পাওয়া যায়।
সারাংশ
XSS আক্রমণ একটি সাধারণ এবং গুরুতর নিরাপত্তা সমস্যা যা ওয়েব অ্যাপ্লিকেশনগুলোকে আক্রান্ত করতে পারে। এটি প্রতিরোধ করতে ইনপুট যাচাই, আউটপুট এনকোডিং, Content Security Policy (CSP), এবং X-XSS-Protection হেডার ব্যবহার করা উচিত। এছাড়াও, CSRF, SQLi, এবং অন্যান্য নিরাপত্তা ব্যবস্থাগুলি সঠিকভাবে প্রয়োগ করা গুরুত্বপূর্ণ, যাতে আপনার ওয়েব অ্যাপ্লিকেশনটি সুরক্ষিত থাকে।